Global Struggle: The Fight Between Adolescent Life and Death

Spring 2025 | BAA1030 Data Analytics & Storytelling (20074)
Student Name: Garima Sahu
Student ID: A00013327
Programme: MSc in Management (Strategy)
With deep gratitude to Professor Dr. Damien Dupre, Dublin City University, for his invaluable support and insight.

Executive Summary

This report dives into the global crisis of adolescent mortality using current datasets from UNICEF, the World Bank, and WHO. We examine how demographic, economic, health, and gender-based factors intersect to shape outcomes for young people between the ages of 10 and 19.

Through a series of powerful data visualizations, we reveal key patterns, spotlight the world’s most vulnerable populations, and offer policy recommendations aligned with SDG 3 (Good Health and Well-Being) and SDG 10 (Reduced Inequalities).

The aim is clear: to turn data into action that can save lives.


Introduction

Adolescence is supposed to be a time of growth and potential. But in many parts of the world, it’s a time of survival. Millions of adolescents die each year from preventable causes—an invisible crisis with devastating consequences.

This report brings visibility to those young lives, lost too soon. By exploring global datasets, we uncover how adolescent mortality is shaped by geography, gender, deprivation, and development—and what can be done about it.


Visual Analysis and Insights

1. World Map: Global Distribution of Adolescents

Title: Where the Youth Are: Global Share of Adolescent Population

Code
library(tidyverse)
library(leaflet)
library(rnaturalearth)
library(rnaturalearthdata)
library(sf)
library(scales)

# Load your data
adolescent_data <- read_csv("docs/unicef_indicator_1.csv")

# Region mapping
region_map <- tribble(
  ~country,            ~Region,
  "India",             "Asia",
  "China",             "Asia",
  "Nigeria",           "Sub-Saharan Africa",
  "Ethiopia",          "Sub-Saharan Africa",
  "Brazil",            "Latin America",
  "Mexico",            "Latin America",
  "USA",               "Other Regions",
  "Russia",            "Other Regions",
  "France",            "Other Regions"
)

# Combine data
adolescent_data <- adolescent_data %>%
  left_join(region_map, by = "country")

# Aggregate by country
country_summary <- adolescent_data %>%
  group_by(country, Region) %>%
  summarise(TotalPopulation = sum(obs_value, na.rm = TRUE), .groups = 'drop')

# Load map data
world <- ne_countries(scale = "medium", returnclass = "sf")

# Merge country data with map
world_data <- world %>%
  left_join(country_summary, by = c("name" = "country"))

# Create leaflet map
leaflet(world_data, options = leafletOptions(attributionControl = FALSE)) %>%
  addPolygons(
    fillColor = ~colorQuantile("YlOrRd", TotalPopulation)(TotalPopulation),
    fillOpacity = 0.7,
    color = "#444444",
    weight = 1,
    label = ~paste0(
      "", name, " ",
      "Population: ", comma(TotalPopulation)
    ),
    labelOptions = labelOptions(direction = "auto"),
    highlightOptions = highlightOptions(
      weight = 2,
      color = "#666",
      bringToFront = TRUE
    )
  ) %>%
  addLegend(pal = colorQuantile("YlOrRd", world_data$TotalPopulation),
            values = world_data$TotalPopulation,
            title = "Adolescent Population",
            position = "bottomright")

Insight:
Over 60% of the world’s adolescents live in Asia and Sub-Saharan Africa—regions facing some of the highest youth mortality rates. This concentration demands urgent attention from global policymakers.
- Asia: 42%
- Sub-Saharan Africa: 21%
- Latin America: 10%
- Other Regions: 27%

2. Bar Chart: Global Distribution of Adolescents

Title: National Breakdown of Adolescent Populations

Code
library(tidyverse)
library(scales)

# Clean and get top 10 countries
top10_country_summary <- country_summary %>%
  filter(!is.na(TotalPopulation) & TotalPopulation > 0) %>%
  arrange(desc(TotalPopulation)) %>%
  slice_head(n = 10)

# Create horizontal bar chart (country-only, no region color)
ggplot(top10_country_summary, aes(x = reorder(country, TotalPopulation), y = TotalPopulation)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  labs(
    title = "Top 10 Countries by Adolescent Population",
    x = "Country",
    y = "Adolescent Population"
  ) +
  scale_y_continuous(labels = comma) +
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 10)
  )

Insight:
India, China, Nigeria, and Pakistan bear the highest burden of adolescent deaths globally. Their large youth populations and systemic health gaps make them critical focus areas for targeted interventions.


3. Stacked Bar Chart: Gender Distribution of Mortality Across Countries

Code
library(tidyverse)
library(scales)

# Load the data
gender_mortality <- read_csv("docs/unicef_indicator_1.csv")

# Clean and rename
gender_mortality <- gender_mortality %>%
  rename(
    Country = country,
    Gender = sex,
    MortalityRate = obs_value
  ) %>%
  filter(!is.na(MortalityRate))

# Filter to latest year per Country and Gender
latest_year_data <- gender_mortality %>%
  group_by(Country, Gender) %>%
  filter(time_period == max(time_period)) %>%
  ungroup()

# Calculate total mortality to find top 5 countries
top_5_countries <- latest_year_data %>%
  group_by(Country) %>%
  summarise(Total = sum(MortalityRate, na.rm = TRUE)) %>%
  arrange(desc(Total)) %>%
  slice_head(n = 5)

# Filter to top 5 countries only
top_gender_mortality <- latest_year_data %>%
  filter(Country %in% top_5_countries$Country)

# Reorder country factor for plotting
top_gender_mortality <- top_gender_mortality %>%
  mutate(Country = factor(Country, levels = top_5_countries$Country))

# Plot stacked bars with gender-specific labels
ggplot(top_gender_mortality, aes(x = Country, y = MortalityRate, fill = Gender)) +
  geom_bar(stat = "identity") +
  geom_text(
    aes(label = comma(round(MortalityRate))),
    position = position_stack(vjust = 0.5),
    color = "white",
    fontface = "bold",
    size = 4
  ) +
  labs(
    title = "Gender Divide: Who's at Greater Risk? (Top 5 Countries)",
    x = "Country",
    y = "Adolescent Mortality Rate (per 100,000)"
  ) +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.05))) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Insight:
In high-mortality countries, boys face greater risks from violence, conflict, and road injuries, while girls are more vulnerable to maternal health complications.
- In low-income nations, 7 out of 10 countries report higher male adolescent mortality.


4. Scatter Plot: Life Expectancy vs Adolescent Mortality Rate

Code
library(readr)
library(dplyr)
library(ggplot2)

# Load datasets
life_df <- read_csv("docs/unicef_metadata.csv")
mortality_df <- read_csv("docs/unicef_indicator_1.csv")

# Prepare life expectancy data
life_df <- life_df %>%
  distinct(country, .keep_all = TRUE) %>%
  select(country, `Life expectancy at birth, total (years)`) %>%
  rename(
    Country = country,
    LifeExpectancy = `Life expectancy at birth, total (years)`
  )

# Prepare and aggregate mortality data (e.g., average per country)
mortality_df <- mortality_df %>%
  group_by(country) %>%
  summarise(AdolescentMortalityRate = mean(obs_value, na.rm = TRUE)) %>%
  rename(Country = country)

# Join datasets
merged_df <- inner_join(life_df, mortality_df, by = "Country")

# Plot
ggplot(merged_df, aes(x = LifeExpectancy, y = AdolescentMortalityRate)) +
  geom_point(color = "steelblue", alpha = 0.7) +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(
    title = "The Life-Death Link: How Longevity Reflects Youth Survival",
    x = "Life Expectancy (Years)",
    y = "Adolescent Mortality Rate (per 100,000)"
  ) +
  theme_minimal()

Insight:
Countries with high life expectancy consistently show lower adolescent mortality rates. This reflects broader systems of health, safety, and social investment.
- Pearson’s correlation: -0.72
- High-life-expectancy countries like Japan and Norway report mortality rates <10 per 100,000
- Low-life-expectancy nations like Chad and CAR report rates >300


5. Line Chart: Adolescent Deprivation Over Time (2010–2022)

Code
library(readr)
library(ggplot2)
library(dplyr)
library(plotly)
library(htmlwidgets)

# Read data
deprivation_trend <- read_csv("docs/unicef_indicator_2.csv")

# Rename and prepare
deprivation_trend <- deprivation_trend %>%
  rename(
    Year = time_period,
    DeprivationRate = obs_value
  ) %>%
  mutate(Year = as.numeric(Year))

# Aggregate deprivation by year (mean)
trend_summary <- deprivation_trend %>%
  group_by(Year) %>%
  summarise(DeprivationRate = mean(DeprivationRate, na.rm = TRUE))

# Create ggplot
p <- ggplot(trend_summary, aes(x = Year, y = DeprivationRate)) +
  geom_line(color = "firebrick", size = 1.2) +
  labs(
    title = "Poverty’s Grip: Trends in Adolescent Deprivation",
    x = "Year",
    y = "Average Deprivation Rate (%)"
  ) +
  theme_minimal()

# Convert to interactive plot and remove all branding with JS
plotly_obj <- ggplotly(p)

plotly_clean <- htmlwidgets::onRender(
  plotly::config(plotly_obj, displayModeBar = FALSE, displaylogo = FALSE),
  "function(el) {
     var logo = el.querySelectorAll('.modebar-group .logo-text');
     if (logo.length > 0) {
       logo[0].parentNode.removeChild(logo[0]);
     }
   }"
)

plotly_clean

Insight:
Global deprivation rates among adolescents have declined over the last decade, but conflict zones have seen spikes. The pandemic also stalled progress in several regions.
- Global decline: 15% from 2010 to 2022
- Increase observed in Yemen, South Sudan, and Venezuela during periods of instability


6. Horizontal Bar Chart: Leading Causes of Adolescent Mortality

Code
library(readxl)
library(tidyverse)
library(scales)

# Step 1: Load all columns as character to avoid type conflicts
death_factors <- read_excel("docs/Factors accefting death for ado.xlsx", col_types = "text")

# Step 2: Pivot and clean the data
cause_summary <- death_factors %>%
  pivot_longer(cols = -Country, names_to = "Cause", values_to = "DeathCount") %>%
  filter(!is.na(DeathCount) & !DeathCount %in% c("−", "–", "x", "", "NA")) %>%
  mutate(DeathCount = as.numeric(DeathCount)) %>%
  group_by(Cause) %>%
  summarise(TotalDeaths = sum(DeathCount, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(TotalDeaths)) %>%
  slice_head(n = 5)

# Step 3: Plot with data labels
ggplot(cause_summary, aes(x = reorder(Cause, TotalDeaths), y = TotalDeaths)) +
  geom_bar(stat = "identity", fill = "tomato") +
  geom_text(aes(label = comma(round(TotalDeaths))), hjust = -0.1, size = 3.5, color = "black") +
  coord_flip() +
  labs(
    title = "Top 5 Causes of Adolescent Deaths",
    x = "Cause of Death",
    y = "Total Deaths"
  ) +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.15))) +
  theme_minimal()

Insight:
Road injuries, lower respiratory infections, suicide, and maternal conditions dominate adolescent mortality. Many of these causes are preventable with timely healthcare and awareness.

Top 5 Causes Globally (per WHO):
- Bulling 2010-2017
- Alcohol use 2016
- Overweight 2016
- Tobacco use 2013−2017
- Intimate Partner Violence 2010−2018


Conclusion

This data story reveals a sobering truth: adolescent mortality is neither random nor unavoidable—it’s shaped by structural inequities that we can address.

By aligning economic investment, health policy, and global development priorities, we can rewrite this story. We can ensure that adolescence is no longer defined by death, but by opportunity, growth, and the promise of a better future.


References

  • UNICEF Adolescent Mortality Dataset (2024)
  • World Bank Economic and Health Indicators (2024)
  • WHO Global Health Observatory (2024)
  • UN SDG Report (2023)
  • Global Burden of Disease Study (2023)